/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.jm.financeiro.view;

import br.jm.financeiro.datamodel.LazyTipoDocumento;
import br.jm.financeiro.entity.TipoDocumento;
import br.jm.financeiro.sistema.eao.TipoDocumentoEao;
import java.io.Serializable;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;
import org.primefaces.context.RequestContext;
import org.primefaces.model.LazyDataModel;

/**
 *
 * @author joao
 */
public class TipoDocumentoBean implements Serializable {

    private static final long serialVersionUID = 1L;
    private TipoDocumento selectedTipoDocumento;
    private LazyDataModel<TipoDocumento> lazyModel;
    private final TipoDocumentoEao tipoDocumentoJpa;
    private boolean salvar;
    private SelectItem[] tipDocumentoOptions;
    private String[][] tipDocumento = {{"F", "P"}, {"Financeiro", "Proposta"}};

    public TipoDocumentoBean() {
        tipoDocumentoJpa = TipoDocumentoEao.getInstance();
        selectedTipoDocumento = new TipoDocumento();
        
        this.tipDocumentoOptions = createFilterOptions(tipDocumento);

        lazyModel = new LazyTipoDocumento(tipoDocumentoJpa);
    }

    public void inserir(ActionEvent actionEvent) {
        FacesMessage msg = null;
        RequestContext context = RequestContext.getCurrentInstance();
        boolean loggedIn = false;

        try {
            selectedTipoDocumento.setIdDocumento(null);
            tipoDocumentoJpa.create(selectedTipoDocumento);

            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, LoginBean.AtualizaLog("", "Tipo de Documento Inserido com Sucesso: ".concat(selectedTipoDocumento.getDscDocumento())),selectedTipoDocumento.getDscDocumento());
            loggedIn = true;
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro ao Inserir" + selectedTipoDocumento.getDscDocumento(),
                    e.getMessage());
        } finally {
            FacesContext.getCurrentInstance().addMessage(null, msg);
            context.addCallbackParam("loggedIn", loggedIn);
        }
    }

    public void alterar(ActionEvent actionEvent) {
        FacesMessage msg = null;
        RequestContext context = RequestContext.getCurrentInstance();
        boolean loggedIn = false;

        try {
            tipoDocumentoJpa.edit(selectedTipoDocumento);
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, LoginBean.AtualizaLog("", "Tipo de Documento Alterado com Sucesso: ".concat(selectedTipoDocumento.getDscDocumento())),selectedTipoDocumento.getDscDocumento());
            loggedIn = true;
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro ao Alterar: " + selectedTipoDocumento.getDscDocumento(),
                    e.getMessage());
        } finally {
            FacesContext.getCurrentInstance().addMessage(null, msg);
            context.addCallbackParam("loggedIn", loggedIn);
        }
    }

    public void excluir(ActionEvent actionEvent) {
        FacesMessage msg = null;

        try {
            tipoDocumentoJpa.destroy(selectedTipoDocumento);

            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, LoginBean.AtualizaLog("", "Tipo de Documento Excluido com Sucesso: ".concat(selectedTipoDocumento.getDscDocumento())),selectedTipoDocumento.getDscDocumento());
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro ao Excluir: " + selectedTipoDocumento.getDscDocumento(),
                    e.getMessage());
        } finally {
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public LazyDataModel<TipoDocumento> getLazyModel() {
        return lazyModel;
    }

    public void setLazyModel(LazyDataModel<TipoDocumento> lazyModel) {
        this.lazyModel = lazyModel;
    }

    public TipoDocumento getSelectedTipoDocumento() {
        return selectedTipoDocumento;
    }

    public void setSelectedTipoDocumento(TipoDocumento selectedTipoDocumento) {
        this.selectedTipoDocumento = selectedTipoDocumento;
    }

    public boolean isSalvar() {
        return salvar;
    }

    public void setSalvar(boolean salvar) {
        this.salvar = salvar;
    }

    public void preparaInserir(ActionEvent actionEvent) {
        selectedTipoDocumento = new TipoDocumento();
        selectedTipoDocumento.setTipDocumento("Financeiro");
        this.salvar = true;
    }
    
    private SelectItem[] createFilterOptions(String[][] tipDocumentos) {
        SelectItem[] options = new SelectItem[3];

        options[0] = new SelectItem("", "Selecione");
        for (int i = 0; i < 2; i++) {
            options[i + 1] = new SelectItem(tipDocumentos[0][i], tipDocumentos[1][i]);
        }

        return options;
    }

    public SelectItem[] getTipDocumentoOptions() {
        return tipDocumentoOptions;
    }

    public void setTipDocumentoOptions(SelectItem[] tipDocumentoOptions) {
        this.tipDocumentoOptions = tipDocumentoOptions;
    }

    public String[][] getTipDocumento() {
        return tipDocumento;
    }

    public void setTipDocumento(String[][] tipDocumento) {
        this.tipDocumento = tipDocumento;
    }
    
}
